const mysql = require('mysql2/promise');
require('dotenv').config();

async function testConnection() {
  console.log('🔍 测试数据库连接...');
  console.log('配置信息:');
  console.log(`   主机: ${process.env.DB_HOST || 'localhost'}`);
  console.log(`   端口: ${process.env.DB_PORT || '3306'}`);
  console.log(`   用户: ${process.env.DB_USER || 'root'}`);
  console.log(`   数据库: ${process.env.DB_DATABASE || 'devops'}`);
  console.log(`   密码: ${process.env.DB_PWD ? '[已设置]' : '[未设置]'}`);
  console.log('');

  const connection = mysql.createConnection({
    host: process.env.DB_HOST || 'localhost',
    port: parseInt(process.env.DB_PORT) || 3306,
    user: process.env.DB_USER || 'root',
    password: process.env.DB_PWD || 'root',
    database: process.env.DB_DATABASE || 'devops',
    connectTimeout: 10000, // 10秒超时
  });

  try {
    console.log('⏳ 正在连接数据库...');
    await connection.connect();
    console.log('✅ 数据库连接成功!');
    
    // 测试查询
    const [rows] = await connection.execute('SELECT 1 as test');
    console.log('✅ 查询测试成功:', rows);
    
    // 检查数据库是否存在
    const [databases] = await connection.execute('SHOW DATABASES');
    console.log('📋 可用数据库:');
    databases.forEach(db => {
      console.log(`   - ${db.Database}`);
    });
    
  } catch (error) {
    console.error('❌ 数据库连接失败:');
    console.error('   错误类型:', error.code);
    console.error('   错误信息:', error.message);
    
    if (error.code === 'ETIMEDOUT') {
      console.error('\n💡 连接超时，可能的原因:');
      console.error('   1. 网络连接问题');
      console.error('   2. 防火墙阻止连接');
      console.error('   3. 数据库服务器未运行');
      console.error('   4. IP地址或端口错误');
    } else if (error.code === 'ER_ACCESS_DENIED_ERROR') {
      console.error('\n💡 访问被拒绝，可能的原因:');
      console.error('   1. 用户名或密码错误');
      console.error('   2. 用户没有访问权限');
    } else if (error.code === 'ECONNREFUSED') {
      console.error('\n💡 连接被拒绝，可能的原因:');
      console.error('   1. 数据库服务器未运行');
      console.error('   2. 端口号错误');
      console.error('   3. 防火墙阻止连接');
    }
  } finally {
    await connection.end();
  }
}

testConnection(); 